在linux系统下进行history的配置,包括存储的上限、是否存储重复命令等
原文链接:设置linux系统history相关变量,命令时间、保存history条数,多session共享history
设置历史记录的时间
1 | # vi /etc/profile //在文件末尾添加以下内容,然后保存退出重新登陆即可 |
1 | export HISTTIMEFORMAT='%F %T ' |
使用HISTSIZE 控制历史命令记录的总行数
将下面两行内容追加到.bash_profile文件并重新登陆,history命令的记录数将变成3000条。1
2
3# vi ~/.bash_profile
HISTSIZE=3000
HISTFILESIZE=3000
HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数.
HISTSIZE 定义了 history 命令输出的记录数.
如果想禁用history, 可以设置HISTSIZE=0:
修改.bash_profile,只对当前用户的history有效,如果修改/etc/profile则对所有用户用效!
使用HISTFILE更改历史文件名称
默认情况下命令历史存储在 ~/.bash_history 文件中 。 添加下列内容到 .bash_profile 文件并重新登录bash shell, 将使用 /var/history/$USER-$UID.log 来存储命令历史 :1
2# vi ~/.bash_profile //输入以下内容
HISTFILE=/var/history/$USER-$UID.log
测试,分别连续3次输入ls、pwd1
2
3
4
5
6# ls
# ls
# ls
# pwd
# pwd
# pwd
可以看到,只有1条ls和pwd命令1
2
3
4
5# cat .bash_history
#1436160573
ls
#1436160575
pwd
使用HISTCONTROL清除整个命令历史中的重复条目
上例中的ignoredups只能剔除连续的重复条目。要清除整个命令历史中的重复条目,可以将HISTCONTROL设置成erasedups1
2# vi ~/.bash_profile //将HISTCONTROL修改成erasedups
HISTCONTROL=erasedups
使用 HISTCONTROL 强制 history不记住特定的命令
将 HISTCONTROL 设置为 ignorespace, 并在不想被记住的命令前面输入一个空格1
2
3
4
5
6
7# vi ~/.bash_profile //添加以下内容
HISTCONTROL=ignorespace
# pwd
# service httpd stop //不被history记录的命令
# history | tail -3
68 pwd
69 history | tail -3
用户打开多个终端(产生多个session)情况下,共享history
由于bash的history文件默认是覆盖,如果存在多个终端,最后退出的会覆盖以前历史记录,改为追加形式1
2# vi ~/.bash_profile //添加以下内容
shopt -s histappend
实时追加history,不必等用户退出才将内存中的history记录到文件
1 | # vi ~/.bash_profile //添加以下内容 |
这里补充下,history -a是追加当前session的历史命令记录到history文件,而history -w则是会用当前session的历史命令替换history文件
实例
设置uid大于等于500的用户的history安全性
需求:
1、记录统一转移到/var/history目录下;
2、用户无法删除自己的history文件,无法清空history;
3、多个终端共享history,实时追加;
4、限制history文件大小和保存的条数;
5、举例用户,lionel;uid=5221
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
401)配置全局环境变量文件/etc/profile
# vi /etc/profile //添加以下内容
# add by coolnull
if [ $UID -ge 500 ];then
readonly HISTFILE=/var/history/$USER-$UID.log
readonly HISTFILESIZE=50000
readonly HISTSIZE=10000
readonly HISTTIMEFORMAT='%F %T '
readonly HISTCONTROL=ignoredups
shopt -s histappend
readonly PROMPT_COMMAND="history -a"
fi
创建目录结构
# mkdir /var/history
配置目录权限,使得用户有权限创建自己的history文件
# chmod 777 /var/history
# chmod a+t /var/history
2)限制用户删除自己的history文件
# chattr +a /var/history/lionel-522.log
3)限制用户修改自己主目录的环境变量配置文件
# chattr +a /home/lionel/.bash*
# lsattr /home/lionel/.bash*
-----a------- /home/lionel/.bash_logout
-----a------- /home/lionel/.bash_profile
-----a------- /home/lionel/.bashrc
4)禁止普通用户切换到系统中其他shell环境(一般包括csh,tcsh,ksh)
# chmod 750 tcsh(csh是tcsh的软连接,设置tcsh就可以了)
# chmod 750 /bin/ksh
普通帐号测试
[zhangfei@node1 ~]$ tcsh
-bash: /bin/tcsh: Permission denied
[zhangfei@node1 ~]$ ksh
-bash: /bin/ksh: Permission denied